package com.zenithmind.chat.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.chat.pojo.entity.ChatGroupAssociation;
import com.zenithmind.chat.pojo.dto.ChatGroupAssociationDTO;
import com.zenithmind.chat.pojo.vo.ChatGroupAssociationVO;

import java.util.List;

/**
 * 群组关联服务接口 - 遵循接口隔离原则
 * 只包含群组关联管理的核心功能
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface ChatGroupAssociationService extends IService<ChatGroupAssociation> {

    /**
     * 创建群组关联
     * 
     * @param dto 关联信息
     * @param userId 操作用户ID
     * @return 关联ID
     */
    String createAssociation(ChatGroupAssociationDTO dto, String userId);

    /**
     * 删除群组关联
     * 
     * @param associationId 关联ID
     * @param userId 操作用户ID
     * @return 删除结果
     */
    Boolean deleteAssociation(String associationId, String userId);

    /**
     * 根据群组ID查询关联列表
     * 
     * @param groupId 群组ID
     * @param userId 当前用户ID
     * @return 关联列表
     */
    List<ChatGroupAssociationVO> getAssociationsByGroupId(String groupId, String userId);

    /**
     * 根据关联类型查询关联列表
     * 
     * @param associationType 关联类型
     * @param userId 当前用户ID
     * @return 关联列表
     */
    List<ChatGroupAssociationVO> getAssociationsByType(String associationType, String userId);

    /**
     * 根据关联ID查询关联的群组列表
     * 
     * @param associationId 关联ID
     * @param userId 当前用户ID
     * @return 群组关联列表
     */
    List<ChatGroupAssociationVO> getAssociationsByAssociationId(String associationId, String userId);

    /**
     * 检查关联是否存在
     * 
     * @param groupId 群组ID
     * @param associationType 关联类型
     * @param associationId 关联ID
     * @return 是否存在
     */
    Boolean checkAssociationExists(String groupId, String associationType, String associationId);

    /**
     * 批量创建群组关联
     * 
     * @param dtoList 关联信息列表
     * @param userId 操作用户ID
     * @return 创建结果
     */
    Boolean batchCreateAssociations(List<ChatGroupAssociationDTO> dtoList, String userId);

    /**
     * 批量删除群组关联
     * 
     * @param associationIds 关联ID列表
     * @param userId 操作用户ID
     * @return 删除结果
     */
    Boolean batchDeleteAssociations(List<String> associationIds, String userId);
}
